void main() {
  // 创建男人对象
  Man man = Man('李雷', 13);
  print(man.name);
  man.eat();

  // 创建女人对象
  Woman woman = Woman('韩梅梅', 14);
  print(woman.name);
  woman.eat();
  woman.danceType = '街舞';
  woman.sing(woman.name);
  woman.dance(woman.name);
}

/// 人类
class Person {
  Person(this.name, this.age);

  String? name;
  int? age;

  void eat() {
    print('$name -- eat');
  }
}

/// 男人类
class Man extends Person {
  // 定义子类构造函数
  Man(super.name, super.age);
}

/// 女人类
class Woman extends Person with Sing, DanceMixin {
  // 定义子类构造函数
  Woman(super.name, super.age);
}

// mixin 混入（解耦：降低不同类之间的相互依赖关系）
mixin Sing {
  // 唱歌的方法
  void sing(String? name) {
    print('$name -- 爱唱歌');
  }
}

// 跳舞方法的扩展类
mixin DanceMixin {
  // 舞种
  String? danceType;
  // 跳舞的方法
  void dance(String? name) {
    print('$name -- 爱跳舞');
  }
}